// 实例化对象
import Request from './request'
import baseUrl from './env'
import {
  getStorage,
  clearStorage
} from './storage'
import {
  modal,
  toast
} from './extendApi'
// 实例化对象，并配置基地址和超时时间
const instance = new Request({
  baseUrl,
  timeout: 15000
})

//请求响应拦截器
instance.interceptors.request = (config) => {

  // 在请求之前设置token
  if (getStorage('token')) {
    config.header['token'] = getStorage('token')
  }

  return config
}
// 响应拦截器
instance.interceptors.response = async (response) => {

  const {
    isSuccess,
    data
  } = response
  // isSuccess: false 表示是网络超时或其他问题，提示 网络异常，同时将返回即可
  if (!isSuccess) {
    wx.showToast({
      title: '网络超时',
      icon: "error"
    })
    return Promise.reject(response)
  }
  switch (data.code) {
    // 业务状态码 === 200， 说明接口请求成功，服务器成功返回了数据
    case 200:
      return data;
      // 业务状态码 === 208， 说明没有 token 或者 token 过期失效，需要登录或者重新登录
    case 208:
      const res = await modal({
        title: '提示',
        content: "token过期失效，请重新登录",
        showCancel: true
      })
      if (res) {
        // 清空本地存储
        clearStorage()
        // 跳转到登录页
        wx.navigateTo({
          url: '/pages/login/login'
        })
      }
      return Promise.reject(new Error(data.error))
      // 业务状态码 === 其他，说明请求或者响应出现了异常
    default:
      toast({
        title: '请求异常!',
        icon: 'error'
      })
      return Promise.reject(new Error(data.error))

  }

}
export default instance